package com.dragons.dragonsvf.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dragons.dragonsvf.dao.ProductMapper;
import com.dragons.dragonsvf.entities.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * @author Dragons.G
 * @date 2025-06-20 15:57:31
 * @description 商品信息控制器
 */
@RestController
public class ProductCtrl {

    @Autowired
    private ProductMapper productMapper;

    @RequestMapping("/pCount") // 查询的时候携带登录信息
    public ResponseDTO pCount(@RequestBody ProductDTO params){

        QueryWrapper<Product> q = new QueryWrapper<>();
        q.eq("product_type", params.getProduct_type());
        Long aLong = productMapper.selectCount(q);

        ResponseDTO res = new ResponseDTO();
        res.setCode(200);
        res.setData(aLong);
        res.setMsg("查询列表总数成功");
        return res;
    }



    @RequestMapping("/pList") // 查询的时候携带登录信息
    public ResponseDTO pList(@RequestBody ProductDTO params){

        QueryWrapper<Product> q = new QueryWrapper<>();
        q.eq("product_type", params.getProduct_type())
            .eq("product_racking",1)
            .orderByDesc("product_create_tm");


//        Page<Product> page = new Page<>(params.getCurrentPage(), params.getPageSize());
        Page<Product> page = new Page<>(1, 9999);
        Page<Product> result = productMapper.selectPage(page, q);
        List<Product> records = result.getRecords();

        List<ProductDTO> list = new ArrayList<>();
        if (records.size()> 0){
            for (Product product : records) {
                ProductDTO productDTO = new ProductDTO();
                BeanUtils.copyProperties(product, productDTO);
                list.add(productDTO);
            }
        }


        ResponseDTO res = new ResponseDTO();

        res.setCode(200);
        res.setData(list);
        res.setMsg("查询成功");

        return res;
    }

    @RequestMapping("/getProductInfoById") // 查询商品信息
    public ResponseDTO getProductInfoById(@RequestBody ProductDTO params){

        Product product = null;
        QueryWrapper<Product> q = new QueryWrapper<>();
        if (!"".equals(params.getId() == null ? "": params.getId().trim())) {
            q.eq("id", params.getId().trim());
            product = productMapper.selectOne(q);
        } else if (!"".equals(params.getProduct_name() == null ? "": params.getProduct_name().trim())) {
            q.eq("product_name", params.getProduct_name().trim());
            product = productMapper.selectOne(q);
        }

        ResponseDTO res = new ResponseDTO();

        if (product != null){
            res.setCode(200);
            res.setData(product);
            res.setMsg("查询商品信息成功");
        } else {
            res.setCode(200);
            res.setMsg("查询商品信息失败");
        }
        return res;
    }
















    // -------------------------------------------------------- 获取后台列表信息
    @RequestMapping("/productCreateBak") // 新增商品
    public ResponseDTO productCreateBak(@RequestBody ProductBakDTO params){

        Product product = new Product();
        product.setId(params.getId());
        product.setProduct_name(params.getProductName());
        product.setProduct_desc(params.getProductDesc());
        product.setProduct_price(params.getProductPrice());
        product.setProduct_pay(params.getProductPay());
        product.setProduct_tag_desc1(params.getProductTagDesc1());
        product.setProduct_tag_desc2(params.getProductTagDesc2());
        product.setProduct_tag_desc3(params.getProductTagDesc3());
        product.setProduct_img_url(params.getProductImgUrl());
        product.setProduct_discount(params.getProductDiscount());
        product.setProduct_authority(params.getProductAuthority());
        product.setProduct_racking(params.getProductRacking());
        product.setProduct_type(params.getProductType());
        product.setProduct_create_tm(new Timestamp(System.currentTimeMillis()));
        product.setProduct_update_tm(new Timestamp(System.currentTimeMillis()));
        product.setStock(params.getStock());

        ResponseDTO res = new ResponseDTO(); // 结果返回封装

        int rows = productMapper.insert(product);
        if (rows > 0){
            res.setCode(200);
            res.setData(rows);
            res.setMsg("商品创建成功");
        } else {
            res.setCode(200);
            res.setData(0);
            res.setMsg("商品创建失败");
        }
        return res;
    }

    @RequestMapping("/getBakProductList") // 后台查询商品列表
    public ResponseDTO deleteOrderByIdBak(@RequestBody ProductBakDTO params){
        ResponseDTO res = new ResponseDTO();

        QueryWrapper<Product> q = new QueryWrapper<>();
        if (!"".equals(params.getId().trim())) {
            q.eq("id", params.getId()); // 商品ID
        }
        if (!"".equals(params.getProductName().trim())) {
            q.like("product_name", params.getProductName()); // 商品名称
        }
        if (!"".equals(params.getProductDesc().trim())) {
            q.like("product_desc", params.getProductDesc()); // 商品描述
        }
        if (params.getProductPrice()!=null && params.getProductPrice() > 0) {
            q.eq("product_price",params.getProductPrice()); // 商品价格
        }
        if (params.getProductPay()!=null && params.getProductPay() > 0) {
            q.eq("product_pay",params.getProductPay()); // 付款人数
        }
        // 商品标签
        if (!"".equals(params.getProductTagDesc().trim())) {
            q.like("product_tag_desc1", params.getProductTagDesc())
                .or(true)
                .like("product_tag_desc2", params.getProductTagDesc())
                .or(true)
                .like("product_tag_desc3", params.getProductTagDesc()); // 商品描述
        }
        if (params.getProductDiscount()!=null && params.getProductDiscount() > 0) {
            q.eq("product_discount",params.getProductDiscount()); // 商品折扣
        }
        if (params.getProductAuthority()!=null) {
            q.eq("product_authority",params.getProductAuthority()); // 商品权限
        }
        if (params.getProductRacking()!=null) {
            q.eq("product_racking",params.getProductRacking()); // 是否上架
        }
        if (params.getProductType()!=null) {
            q.eq("product_type",params.getProductType()); // 商品分类
        }
        if (params.getProductCreateTm()!=null) {
            q.like("product_create_tm",params.getProductCreateTm()); // 商品创建时间
        }
        if (params.getProductUpdateTm()!=null) {
            q.like("product_update_tm",params.getProductUpdateTm()); // 商品修改
        }
        if (params.getStock()!=null && params.getStock() > 0) {
            q.eq("stock",params.getStock()); // 库存
        }
        Page<Product> page = new Page<>(params.getCurrentPage(), params.getPageSize());
        Page<Product> result = productMapper.selectPage(page, q);
        List<Product> records = result.getRecords();

        List<ProductBakDTO> products = new ArrayList<>();
        if (records.size() > 0) {
            for (Product product : records) {
                ProductBakDTO p = new ProductBakDTO();
                p.setId(product.getId());
                p.setProductName(product.getProduct_name());
                p.setProductDesc(product.getProduct_desc());
                p.setProductPrice(product.getProduct_price());
                p.setProductPay(product.getProduct_pay());
                p.setProductTagDesc1(product.getProduct_tag_desc1());
                p.setProductTagDesc2(product.getProduct_tag_desc2());
                p.setProductTagDesc3(product.getProduct_tag_desc3());
                p.setProductImgUrl(product.getProduct_img_url());
                p.setProductDiscount(product.getProduct_discount());
                p.setProductAuthority(product.getProduct_authority());
                p.setProductRacking(product.getProduct_racking());
                p.setProductType(product.getProduct_type());
                p.setProductCreateTm(product.getProduct_create_tm());
                p.setProductUpdateTm(product.getProduct_update_tm());
                p.setStock(product.getStock());
                products.add(p);
            }
        }

        res.setCode(200);
        res.setData(products);
        res.setMsg("查询成功");
        return res;
    }

    @RequestMapping("/getBakProducListCount") // 查询订单列表
    public ResponseDTO orderCountBak(@RequestBody ProductBakDTO params){

        ResponseDTO res = new ResponseDTO();

        QueryWrapper<Product> q = new QueryWrapper<>();
        if (!"".equals(params.getId().trim())) {
            q.eq("id", params.getId()); // 商品ID
        }
        if (!"".equals(params.getProductName().trim())) {
            q.like("product_name", params.getProductName()); // 商品名称
        }
        if (!"".equals(params.getProductDesc().trim())) {
            q.like("product_desc", params.getProductDesc()); // 商品描述
        }
        if (params.getProductPrice()!=null && params.getProductPrice() > 0) {
            q.eq("product_price",params.getProductPrice()); // 商品价格
        }
        if (params.getProductPay()!=null && params.getProductPay() > 0) {
            q.eq("product_pay",params.getProductPay()); // 付款人数
        }
        // 商品标签
        if (!"".equals(params.getProductTagDesc().trim())) {
            q.like("product_tag_desc1", params.getProductTagDesc())
                .or(true)
                .like("product_tag_desc2", params.getProductTagDesc())
                .or(true)
                .like("product_tag_desc3", params.getProductTagDesc()); // 商品描述
        }
        if (params.getProductDiscount()!=null && params.getProductDiscount() > 0) {
            q.eq("product_discount",params.getProductDiscount()); // 商品折扣
        }
        if (params.getProductAuthority()!=null) {
            q.eq("product_authority",params.getProductAuthority()); // 商品权限
        }
        if (params.getProductRacking()!=null) {
            q.eq("product_racking",params.getProductRacking()); // 是否上架
        }
        if (params.getProductType()!=null) {
            q.eq("product_type",params.getProductType()); // 商品分类
        }
        if (params.getProductCreateTm()!=null) {
            q.like("product_create_tm",params.getProductCreateTm()); // 商品创建时间
        }
        if (params.getProductUpdateTm()!=null) {
            q.like("product_update_tm",params.getProductUpdateTm()); // 商品修改
        }
        if (params.getStock()!=null && params.getStock() > 0) {
            q.eq("stock",params.getStock()); // 库存
        }

        Long aLong = productMapper.selectCount(q);

        res.setCode(200);
        res.setData(aLong);
        res.setMsg("查询商品总数成功");
        return res;
    }

    @RequestMapping("/updateProductType") // 更新订单状态
    public ResponseDTO updateProductType(@RequestBody ProductBakDTO params) {

        UpdateWrapper<Product> updw = new UpdateWrapper<>();
        updw.eq("id", params.getId());
        updw.set("product_racking", params.getProductRacking());
        // 执行更新操作  参数1为null表示不依赖实体对象
        int affectedRows = productMapper.update(null, updw);
        // 构造响应结果
        ResponseDTO res = new ResponseDTO();
        res.setCode(200);
        if (affectedRows > 0) {
            res.setMsg("商品状态更新成功");
        } else {
            res.setMsg("商品状态更新失败");
        }
        return res;
    }

    @RequestMapping("/productUpdateBak") // 修改商品信息
    public ResponseDTO productUpdateBak(@RequestBody ProductBakDTO params){

        Product product = new Product();
        product.setId(params.getId());
        product.setProduct_name(params.getProductName());
        product.setProduct_desc(params.getProductDesc());
        product.setProduct_price(params.getProductPrice());
        product.setProduct_pay(params.getProductPay());
        product.setProduct_tag_desc1(params.getProductTagDesc1());
        product.setProduct_tag_desc2(params.getProductTagDesc2());
        product.setProduct_tag_desc3(params.getProductTagDesc3());
        product.setProduct_img_url(params.getProductImgUrl());
        product.setProduct_discount(params.getProductDiscount());
        product.setProduct_authority(params.getProductAuthority());
        product.setProduct_racking(params.getProductRacking());
        product.setProduct_type(params.getProductType());
        //product.setProduct_create_tm(new Timestamp(System.currentTimeMillis()));
        product.setProduct_update_tm(new Timestamp(System.currentTimeMillis()));
        product.setStock(params.getStock());

        ResponseDTO res = new ResponseDTO(); // 结果返回封装

        int rows = productMapper.updateById(product);
        if (rows > 0){
            res.setCode(200);
            res.setData(rows);
            res.setMsg("商品修改成功");
        } else {
            res.setCode(200);
            res.setData(0);
            res.setMsg("商品修改失败");
        }
        return res;
    }


    @RequestMapping("/deleteProductByIdBak") // 后台删除商品
    public ResponseDTO deleteProductByIdBak(@RequestBody ProductBakDTO params){
        ResponseDTO res = new ResponseDTO();
        Product product = new Product();
        product.setId(params.getId());
        int i = productMapper.deleteById(product);
        if (i > 0) {
            res.setCode(200);
            res.setData(i);
            res.setMsg("商品删除成功");
        } else {
            res.setCode(200);
            res.setData(i);
            res.setMsg("商品删除失败");
        }
        return res;
    }


















}
